package run.siyuan.jdk.算法_4版.排序;

/**
 * <p>通常人们整理桥牌的方法是一张一张的来，将每一张牌插入到其他已经有序的牌中的适当位置。
 * 在计算机的实现中，为了给要插入的元素腾出空间，我们需要将其余所有元素在插入之前都向右移
 * 动一位。这种算法叫做插入排序
 *
 * @className: Intertion
 * @Description: TODO 插入排序
 * @author: siyuan
 * @date: 2022/12/14 17:28
 */
public class Insertion extends BaseSort {

    /**
     * 将a[]按降序排列并返回
     *
     * @param a 源数组
     * @return
     */
    public static void sortDesc(Comparable[] a) {
        int n = a.length;
        for (int i = 1; i < n; i++) {
            for (int j = i; j > 0 ; j--) {
                Comparable w = a[j];
                Comparable v = a[j-1];
                if (less(v, w)) {
                    v = w;
                    exch(a, i, j);
                }
            }
        }
    }

    /**
     * 将a[]按升序排列并返回
     *
     * @param a 源数组
     * @return
     */
    public static void sortAsc(Comparable[] a) {
        int n = a.length;
//        for (int i = 0; i < n; i++) {
//            Comparable v = a[i];
//            for (int j = i + 1; j < n; j++) {
//                Comparable w = a[j];
//                if (more(v, w)) {
//                    v = w;
//                    exch(a, i, j);
//                }
//            }
//        }
    }

}
